﻿using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Altairis.FluffyCloud.Data {
    public class Topic {

        [Key]
        [ScaffoldColumn(false)]
        public int TopicId { get; set; }

        [Required, ScaffoldColumn(false)]
        public string UserName { get; set; }
        public virtual User User { get; set; }

        [ScaffoldColumn(false)]
        [Required(ErrorMessage = "Není zadána kategorie")]
        public int TopicCategoryId { get; set; }
        public virtual TopicCategory TopicCategory { get; set; }

        [Display(Name = "Název")]
        [Required(ErrorMessage = "Není zadán název fóra"), MaxLength(50, ErrorMessage="{0} smí mít nejvýše {1} znaků")]
        public string Name { get; set; }

        [Display(Name = "Popis", Description = "Stručný popis fóra, zobrazuje se v seznamech")]
        [Required(ErrorMessage = "Není zadán popis fóra"), MaxLength(100, ErrorMessage="{0} smí mít nejvýše {1} znaků")]
        public string Description { get; set; }

        [Display(Name = "Hlavička", Description = "Hlavička pro uživatele, kteří mají do fóra přístup")]
        [DataType("WikiMarkup")]
        public string HeaderText { get; set; }

        [Display(Name = "Veřejná hlavička", Description = "Hlavička pro uživatele, kteří do fóra nemají přístup")]
        [DataType("WikiMarkup")]
        public string PublicHeaderText { get; set; }
        
        [ScaffoldColumn(false)]
        public DateTimeOffset DateCreated { get; set; }

        // Navigation properties

        [ScaffoldColumn(false)]
        public virtual ICollection<TopicAclEntry> AccessList { get; set; }

        [ScaffoldColumn(false)]
        public virtual ICollection<TopicPost> Posts { get; set; }

        [ScaffoldColumn(false)]
        public virtual ICollection<TopicUserState> UserStates{ get; set; }

        // Constructor

        public Topic() {
            this.DateCreated = DateTimeOffset.UtcNow;
        }

    }
}
